package com.xinke.juc.case04;

import com.xinke.juc.util.Sleeper;
import lombok.extern.slf4j.Slf4j;

import java.util.Objects;

/**
 * @Author：xinke
 * @Date：2025/10/3
 * @Desc:
 */
@Slf4j
public class WaitNotify01 {
    static Object obj = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (obj) {
                log.info("执行。。。");
                try {
                    obj.wait();// 让线程在obj上一直等待下去
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                log.info("执行其他代码。。。");
            }
        }).start();

        new Thread(() -> {
            synchronized (obj) {
                log.info("执行。。。");
                try {
                    obj.wait();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                log.info("执行其他代码。。。");
            }
        }).start();
        // 主线程两秒后执行
        Sleeper.sleep(2);
        log.info("唤醒 obj 上其它线程");
        synchronized (obj) {
            // obj.notify();// 唤醒obj上一个线程
             obj.notifyAll(); // 唤醒obj上所有等待线程

        }
    }
}
